Мобильная утилита – расширение возможностей 1С

На этой странице будет выложено описание и ссылки на скачивание мобильной утилиты, которая существенно расширяет возможности мобильной платформы «1С:Предприятие 8».

Ссылки на скачивание находятся внизу страницы.

Предпосылки создания мобильной утилиты

В свете текущих событий в области мобильных решений для автоматизации бизнес процессов, все чаще начинают смотреть в сторону мобильной платформы 1С. Не удивительно, ведь плюсов огромное количество.

Но иногда средств мобильной платформы оказывается не достаточно, или возникает потребность задействовать возможности, которые еще не реализованы в мобильной платформе.

Например, нам потребовалось получить от телефона ответ на вопрос – включен ли Wi-Fi?

Конечно, можно записывать некий файл, потом считывать его другой программой, потом считывать его в 1С, но такой подход нас не устраивает.

В итоге было найдено решение – на мобильной платформе можно поднять веб-сервер.

Действительно, в этом случае появится возможность и передавать данные, и получать ответ, и также можно будет ожидать ответ от сервера. Также, например, операция сканирования требует ответ об успешном выполнении.

Мы видим, что веб-сервер на мобильном устройстве решает все эти задачи, и даже дает дополнительные плюсы.

Практика

Теперь рассмотрим само приложение. Выглядит оно после установки – вот так:

image001

Важно, после установки не открывать программу, а нажать Готово. После этого, найти ее в приложениях и запустить.

Если нажать Открыть, потом свернуть, и запустить еще раз, то откроется две копии программы. В нашем случае – это критично, так как у нас будет работать сервер.

После перезагрузки устройства, или правильного выхода – все будет ок.

Теперь зайдем в настройки и укажем сигнал сообщения.

После этого, запускаем сервер, вверху должна появится иконка image004. По умолчанию, он стартует на 8080 порту. Если у Вас нет мобильной 1С, то откройте браузер на компьютере и напишите адрес:

[IP адрес смартфона]:8080/notification?title=Привет&message=Это с компьтера&level=1

Если все ок, то Вы увидите сообщение на телефоне. У них есть три уровня важности – 0,1,2:

image006

У каждого есть своя неповторимая иконка.

В случае, если нет компьютера, то можно открыть браузер в телефоне и набрать:

localhost:8080/notification?title=Привет&message=Это с телефона&level=1

Результат должен быть тем же. Если что-то пошло не так, и сообщение не показалось, то нужно искать причину.

Работа с утилитами в мобильной платформе

Создадим общий модуль, и поместим туда вот такую процедуру:

 

Функция ПредопределенноеПодключение(ТекстДляОтправкиНаСервер, ВернутьОтвет = Ложь)
Попытка
Соединение = Новый HTTPСоединение(АдресСервера,ПортСервера,,,,30);
Заголовки = Новый Соответствие;
Заголовки.Вставить(“host”, АдресСервера+“:”+ПортСервера);

Запрос = Новый HTTPЗапрос(ТекстДляОтправкиНаСервер, Заголовки);
ОтветСервера =Соединение.Получить(Запрос);
Исключение
Сообщить(“Не удалось установить соединение с сервером:”);
Сообщить(ОписаниеОшибки());
Возврат Ложь;
КонецПопытки;
Если ОтветСервера.КодСостояния = 200 Тогда // Данные получены, обрабатываем их
Ответ= ОтветСервера.ПолучитьТелоКакСтроку();
Попытка
СтрОтвета = Десериализовать(Ответ);
Если СтрОтвета.Success Тогда

Возврат ?(ВернутьОтвет,СтрОтвета,Истина);
Иначе
Сообщить(“Не удалось выполнить команду, по причине:”);
Сообщить(СтрОтвета.Error);
Возврат Ложь;
КонецЕсли;
Исключение
Сообщить(“Не удалось распознать ответ от сервера!”);
Сообщить(ОписаниеОшибки());
Возврат Ложь;
КонецПопытки;
Иначе
Ответ = ОтветСервера.КодСостояния;
Сообщить(“Не получен ответ от сервера!”);
Возврат Ложь;
КонецЕсли;
КонецФункции

В итоге появится 4 уровня ошибок:

  1. Не удалось подключиться к серверу.
  2. Не удалось получить ответ от сервера. Возникает в случаях, если такая ошибка есть в самом приложении.
  3. Ошибка десериализации ответа. Ответ – это сериализованная структура с двумя ключами – Success и Error. Первый ключ – булево, второй – строковый. Соответственно, если все прошло успешно, то вернется Истина в первом ключе.
  4. Если произошла контролируемая ошибка, то вернется Ложь и причина ошибки. Например, при попытки включить Wi-Fi на устройстве, на котором он отсутствует.

Все эти ошибки контролируемы, и мы их можем обработать так или иначе.

В ответ мы можем получить или Истина/Ложь (т.е. событие сработало), или полный ответ, если он предусмотрен.

При включении Wi-Fi, нас интересует только факт того, что наша процедура отработала без ошибок.

А при сканировании штрихкода необходимо получить еще и данные.

Включить/ выключить Wi-Fi

ПредопределенноеПодключение(“/wifi?on=”+ВключитьВайФай)

где ВключитьВайФай:

  • 1, если надо включить;
  • 0, если выключить.

Пример использования:

Допустим мы добавили реквизит формы ВключитьВайФай, тип – число, и вынесли как галочку на форму:

&НаКлиенте
ПроцедураВключитьВайФайПриИзменении(Элемент)
ОтветСервера=ПредопределенноеПодключение(“/wifi?on=”+ВключитьВайФай);
ВключитьВайФай=?(ОтветСервера,ВключитьВайФай,НЕВключитьВайФай);
КонецПроцедуры

Проиграть звук

Есть два варианта проигрывания звука:

  • Проиграть предопределенные звуки, которые есть в самом приложении;
  • Проиграть звук по пути.

Пример проигрывания звуков из встроенных в утилиту:

ПредопределенноеПодключение(“/sound?type=2&name=”+[name]+“.mp3”);

Список доступных мелодий:

Массив=НовыйМассив;
Массив.Добавить(“Aunt”);
Массив.Добавить(“Balloon”);
Массив.Добавить(“Chord”);
Массив.Добавить(“Comet”);
Массив.Добавить(“Comp”);
Массив.Добавить(“Critical”);
Массив.Добавить(“Defau”);
Массив.Добавить(“Default”);
Массив.Добавить(“Ding”);
Массив.Добавить(“DingDong”);
Массив.Добавить(“Erok”);
Массив.Добавить(“Error”);
Массив.Добавить(“Erroring”);
Массив.Добавить(“Exclamation”);
Массив.Добавить(“Fail”);
Массив.Добавить(“Forest”);
Массив.Добавить(“Fortepiano”);
Массив.Добавить(“Grid”);
Массив.Добавить(“Ins”);
Массив.Добавить(“Ir_end”);
Массив.Добавить(“Logoff”);
Массив.Добавить(“Logon”);
Массив.Добавить(“Lonas”);
Массив.Добавить(“Mation”);
Массив.Добавить(“Notify”);
Массив.Добавить(“Pop-up”);
Массив.Добавить(“Retto”);
Массив.Добавить(“Ringout”);
Массив.Добавить(“Savana”);
Массив.Добавить(“Season”);
Массив.Добавить(“Shutdown”);
Массив.Добавить(“SpeechOff”);
Массив.Добавить(“SpeechOn”);
Массив.Добавить(“Spoke”);
Массив.Добавить(“Stop”);
Массив.Добавить(“Stoper”);
Массив.Добавить(“Tito”);
Массив.Добавить(“Trafal”);
Массив.Добавить(“Volk”);

Или проиграть мелодию по указному пути:

ПредопределенноеПодключение(“/sound?type=1&name=/sdcard/Music/Ария/Сборники, трибьюты,
саундтреки, синглы, сольные и концертные альбомы/1997 – Легенды Русского Рока
(Compilation)/01 – Волонтёр.mp3”
);

Видим, что тип изменился с 2 на 1, и во втором параметре мы указываем полный путь к файлу.

Push-сообщения

Push-сообщения вызываются следующей строкой:

ПредопределенноеПодключение(“/notification?title=”+ТемаСообщения+“&message=”+ТекстСообщения+“&level=”+СтатусСообщения);

Где:

  • ТемаСообщения – Заголовок сообщения;
  • ТекстСообщения – текст сообщения (не должен быть длинным);
  • СтатусСообщения – уровень сообщения, их всего 3 (0,1,2);

Выглядит это так:

image008

Тут нужно понимать, что сообщение одного типа может быть только одно. Т.е. если мы решим два раза послать сообщения первого уровня, то останется только последнее.

image010

Сканирование камерой телефона

Ну и одно из самых интересных – мы можем сканировать камерой телефона.

Для сканирования используем следующую программу:

https://play.google.com/store/apps/details?id=com.google.zxing.client.android

Это самая популярная программа (у нее более 50 млн. скачиваний) среди программ для сканирования, плюс она предоставляет api-функции для взаимодействия.

При первом сканировании, если эта программа не установлена, то приложение попросит ее установить.

Код в 1С, который добавляет штрихкод в таблицу значений:

ОтветСервера=ПредопределенноеПодключение(“/scan”,Истина);
ЕслиОтветСервера.SuccessТогда
НовСтр=ТаблицаШтрихкодов.Добавить();
НовСтр.Штрихкод=ОтветСервера.Answer.Param1;
НовСтр.ТипШтрихкода=ОтветСервера.Answer.Param2;
КонецЕсли;

Второй параметр в первой строке говорит о необходимости вернуть полный ответ от сервера.

Просканируем данные штрихкоды:

image011

image013

image015

Выглядит это так:

image017

Нужно понимать, что работать приходится не через api-сканер напрямую, а через дополнительную прослойку. В связи с этим может быть несколько багов:

  1. После сканирования сканер не закрывается. В этом случае достаточно нажать «Вернуться» и 1С получит ответ.
  2. После сканирования сканер закрывается и показывается главное окно мобильных утилит. Здесь тоже ничего страшного. Необходимо выйти из 1С, зайти в приложение, остановить сервер и запустить. Далее кнопкой «Вернуться» выйти из конфигурации «Сервер» (важно – не кнопкой «Домой» или «Список приложений») и запустить 1С.
  3. Не запускается сканер, а открывается главное окно программы. В этом случае необходимо перезапустить сервер.

Кроме сканирования мобильной платформой можно сканировать и сразу на компьютер:

image018

Обратите внимание, чтобы использовать эту функцию, 1С на мобильном устройстве не нужно. Т.е. мобильный телефон играет роль сканера.

Конечно, для этого мобильное устройство необходимо подключить так, чтобы у него был статический IP адрес, и была возможность подключиться к нему удаленно.

Кстати, это не зависит от версии 1С, которая стоит на сервере. Необходимо, чтобы она могла делать post запрос к телефону.

Итого

Данный механизм, в целом, рабочий. Существует ряд небольших проблем, но использовать можно. Так что можете смело экспериментировать.

Необходимо упомянуть, что на устройстве должен быть Android 4+.

Если есть какие-то пожелания – пишите в комментариях.

Ссылки на скачивание

Скачивайте мобильную утилиту: [secure_link_ex src=”//fs.kursypo1c.ru/protected/1cv8-mobile/FM2014/ModuleBonus/mobiletools-release 1.0.0.apk”]mobiletools-release 1.0.0.apk[/secure_link_ex] (RAR-архив)

Конфигурация для тестирования мобильной утилиты: [secure_link_ex src=”//fs.kursypo1c.ru/protected/1cv8-mobile/FM2014/ModuleBonus/mobile-apps-fm-module-bonus-conf.rar”]mobile-apps-fm-module-bonus-conf.rar[/secure_link_ex] (RAR-архив)

Комментарии / обсуждение (66):

    • Поддержка курса по EDT

      Да. Но это лучше смотреть в новом курсе. Там все объясняется – как искать приложения с которыми можно работать и т.д.

  1. olgavikt

    Здравствуйте, Дмитрий. Скажите пожалуйста, Acode tools из Вашей публикации на Инфостарте (http://infostart.ru/public/310565/) – это то же, что и здесь? Или Мобильные утилиты получили дальнейшее развитие?

    • Поддержка курса по EDT

      Это уже следующий этап, те мобильные утилиты, которые тут – писались мной и моим знакомым в свободное время. Так, ради забавы.
      А ACODE tools – это уже полноценная разработка фирмы ACODE, в разработке которой – я тоже принимаю участие.

  2. Дмитрий

    Подскажите, возможно ли взаимодействие с мобильными фискальными регистраторами, которые имеют подключаютя по Bluetooth? Появились у Атолла и Штрих-М.

    • Поддержка курса по EDT

      Ну на самом деле – это не должно быть проблемой, все можно сделать, только надо иметь их на руках. А у меня их нет.
      Сейчас новую версию утилит готовим, там будет взаимодействие с NFC, блютуз сканерами моторолы и сайфер лаба и т.д.
      И там же будет возможность писать произвольные плагины на Андроид, вот то о чем вы говорите, по идее, можно сделать плагином.
      Но не имея на руках устройства – ничего сказать не смогу.

  3. olches

    Здравствуйте, скажите, а можно ли с использованием данной утилитки проверить включен gps или нет и если нет, то включить и получить ответ о текущих координатах?

  4. stknova

    Здравствуйте!

    Если к планшету подключен принтер, то как распечатать документ из 1С – какой код отправить в функции ПредопределенноеПодключение, если это возможно?

    • Поддержка курса по EDT

      Это нельзя сделать. Утилиты это не умеют, и врядли будут уметь, так как в 8.3.5 появилась возможность печатать. На счет принтера подключенного к планшету – не знаю,надо пробовать, но если принтер подключен к компу – то проблем нету.
      Делать это можно через постовое сообщение с вложением.

      • basicm

        По поводу “так как в 8.3.5 появилась возможность печатать.”
        Разъясните пожалуйста подробнее, поскольку в документации об это ни слова. Спасибо!

        • Поддержка курса по EDT

          Мы это разбираем в 6 модуле полного курса, так объяснять слишком много времени займет, но если в двух словах – идет печать через облако гугла при помощи почты и приложения для печати.

          • Александр

            Здравствуйте, подскажите, пожалуйста, сейчас механизм печати при подключении принтера к компу через провод такой-же? как можно получить доступ к тренингу по части печати?

            • Поддержка курса по EDT

              Через провод мы не рассматривали. Только через облако, но с выходом 8.3.8 – все уже намного проще, так как можно сохранить в pdf а потом уже слать pdf в облако.

              • Александр

                Приложение печати то, которое используется в облаке? Можно ли реализовать печать POST запросом? Вроде отправлять и получать файлы получается, но запрос печати…

                • Поддержка курса по EDT

                  На сколько я знаю – нет, но не исключаю что появились какие то апи от гугла позволяющие это сделать.
                  Вообще это делается через встроенное приложение. В курсе мы это рассматривали.

  5. ludika

    Очень интересная тема.
    Заинтересовали штрих коды, так как это действительно может быть актуальным.
    Не очень понятен момент:акцентировано внимание на том, что мобильная утилита может работать без установленной на телефоне 1С.
    С точки зрения штрих кодирования не понятен смысл. Тогда рядом с телефоном должен быть всегда компьютер, что бы запустить телефон как сканер? Так? Если же 1С установлено, то можно просто имея телефон, в чистом поле) насканировать товар, в каком-то небольшом количестве. А потом синхронизировать с основной базой.
    Второй вопрос. Не проводились ли тесты, какой размер списка штрихкодов может быть создан,
    Есть ли возможность этот список сохранять после закрытия сеанса 1С, то есть от сеанса к сеансу хранить данные.
    Спасибо болшое.

    • Поддержка курса по EDT

      Ну с выходом 8.3.5 – сканировать можно теперь в 1с без этой утилиты.
      Но утилиту мы используем к примеру в случае штрихкодирования документов.
      На всех документах есть QR код с ссылкой на документ. И человек открыв 1с на компе – может вызвать сканирование на телефоне и прочитать штрихкод.
      плюсы в том, что не надо покупать сотрудникам ТСД, так как документов обычно много не бывает и QR кода значительно меньше чем линейные. А сканеры QR кодов – значительно дороже линейных. Так что как то так :)
      Сканировать можно сколько угодно, после каждого сканирования идет возврат в 1с и туда попадает и штрихкод и его тип.
      Хотя замечу – у 1с сделано красивее. У нас красивее врядли выйдет, так как работает все через прослойку :)

  6. Ришат

    Где взять ссылку на скачивание “Мобильной утилиты”? (внизу страницы отсутствует)

  7. spiyan_r

    подскажите пожалуйста как обработать сворачивание конфигурации, либо нажатие на кнопку блокировки экрана.

    • Поддержка курса по EDT

      Эти системные события, которые нельзя просто так отловить. И даже внешнее нативное приложение – не сможет просто так что то сделать, а повлиять – так вообще не сможет.

  8. nightlight

    Вообще Супер, Большущее спасибо! Это наверное самое ценное что я увидел за последнее время!
    Подумайте Возможность запуска 1С или другой программы с помощью команды…
    Я уже курю тему по поводу поднятия VPN с сервером 1С и мобильным устройством и тогда любая задача (например из ДО) может посылать уведомление на телефон и запускать 1С с нужной формой (хотя про формы я погорячился…)… Вах Вах Вах!!!

    P.S. Дмитрий, не бросайте разработку пожалуйста – В маркет ее с разумным донейтом, даже в самой первой версией!
    P.P.S. Кстати поддерживает ли мобильная платформа COM соединения?

    • Поддержка курса по EDT

      с VPN и прочим я пытался, и нифига не вышло :( Все не то. Но мы пошли другим путем, о нем я расскажу позже.
      З.Ы. Пока не планируем :)
      З.З.Ы. Даже не проверял, но думаю, что – нет.

  9. kuryaev_rail

    Здравствуйте!
    А виджеты на 1с примерно когда появятся?И где можно про их разработку почитать?Статьи какие-нибудь…

    • Поддержка курса по EDT

      Когда они появятся в мобильной платформе 1с? – Не знаю.
      А в мобильные утилиты – планируем внедрить уже скоро :)

    • nightlight

      Пока вроде вы ничего не слышно.
      Кстати, по достоверным источникам 1С хотят переписать Сервер на java (JDBC) , для кроссплатформенности.
      И еще одна фишка – Модульный конфигуратор. Т.е. возможность подключать и изменять не только программные модули, но и сами конструкторы. Вся эта лабуда будет переписываться на java. Будет примочка от 1С на Eclipse. Вот так вот.)

        • Поддержка курса по EDT

          После конференции инфостарта. Мы эти утилиты принципиально переделали, так что после конференции будет новая версия.
          Переделать основательно пришлось в связи с тем, что в 1с появились совершенно новые механизмы.

  10. srvrv

    Какие условия лицензирования утилиты? Можно использовать в коммерческих проектах?

    • Поддержка курса по EDT

      Ага, можно использовать везде. Но претензии – не принимаем :)

    • Поддержка курса по EDT

      iOS не одобряет когда в их телефон можно достучаться не встроенными апи, так что увы…

    • nightlight

      С iOS вообще плохо… Их лицензия напрочь убивает целесообразность использования МП от 1С на нем. Сильно много запретов, которые без нарушения лицензионного соглашения не обойти.

  11. Nikolay

    Здравствуйте. Еще раз спасибо!
    У меня все работает.
    Samsung Note3 Корейский (с антенной)
    Всё отлично работает. Я хотел узнать
    Можно получить исходники ? Начинаю Java учит. Интересно как реализовали.

    • Поддержка курса по EDT

      пока нет, все написано на коленке за пару дней, но мы планируем внедрить систему плагинов. Т.е. вы сможете дописать свой плагин к программе и делать что хотите, а программа будет выступать в роли транслятора.

  12. smeta

    Здравствуйте,

    Спасибо за бонус :)
    Очень интересно посмотреть, попробовать ……

    Такой вопросик. Возможно ли обратиться к серверу из 8.1?

    Я так понял запрос серверу на Android идет с помощью строк:
    Запрос = Новый HTTPЗапрос(ТекстДляОтправкиНаСервер, Заголовки);
    ОтветСервера = Соединение.Получить(Запрос);

    На 8.1 не нашел HTTPЗапрос.
    Попытался использовать “ОтправитьДляОбработки”
    Соединение.ОтправитьДляОбработки(ИмяФайлаОтправки, ТекстДляОтправкиНаСервер, ИмяВыходногоФайла, Заголовки);
    К сожалению получаю ошибку.
    Ошибка работы с Интернет: failure when receiving data from the peer

    Причем эта конструкция на конфигурации Мобильной утилиты работает.

    • Поддержка курса по EDT

      Вы можете это даже через браузер этого компа сделать :)
      Попробуйте вначале так, а потом уже через 1С.
      Я надеюсь вы указали IP мобильного устройства на компьютере?

      • smeta

        IP адрес верный, и код рабочий, только работает он на 8.2
        Я просто хотел прикрутить его к 8.1
        Но как только запускаю его на 8.1 получаю:
        Ошибка работы с Интернет: failure when receiving data from the peer

        Вот и подумал, может что-то не так делаю???
        Через браузер тоже работает.

        А вообще утилита очень полезная. Спасибо Вам!!!

        • Поддержка курса по EDT

          Ну тогда может проблема с 8.1, сделайте проще – напишите vbs или js скрипт и все. И вызывайте с 1с его.

              • Поддержка курса по EDT

                Замечательно. Ну так опишите проблему и решение. Если Вы ошиблись, то 100% кто-то еще ошибется :)

            • smeta

              Проблема была в работе с Интернет.
              Для 8.1 у меня был прописан файл (inetcfg.xml) с конфигурацией прокси. Для 8.2 нет.
              А прокси как таковое для подключения к интернету не использовалось.
              Убрал файл и всё заработало!

  13. rusts

    Подскажите что делать с mobiletools-release 1.0.0.apk качается как zip архив, нужно просто переименовать mobiletools-release 1.0.0.zip в mobiletools-release 1.0.0.apk?

    • Поддержка курса по EDT

      нужно его установить на телефон точно так же, как и мобильную платформу от 1С. Т.е. скопируйте его на телефон и там уже установите.

  14. Gendalf

    При сканировании с компа, комп ответ получает, но сканер закрывается только после сканирования следующего штрихкода (ну или того-же еще раз). На мобиле всё в порядке.
    HUAWEI U9200

    • Поддержка курса по EDT

      Утилита не проходила масштабных тестов, а из-за огромного количества устройств и версий ОС – могут быть разные результаты.
      Попробуйте остановить сервер и запустить снова. Или после сканирования – нажать назад.
      Кроме этого – есть у программы тайминг встроенный, и если вы не успели в течении какого то время просканировать – ответ не придет.

      Это пока первая версия, дальше будем ее усовершенствовать :)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *